package util

import (
	"fmt"
	"math/rand"
	"time"

	_ "image/jpeg"
	_ "image/png"

	"github.com/shopspring/decimal"
)

// 生成随机字符串，小写字母和数字
func GetRandomString(l int) string {
	str := "0123456789abcdefghijklmnopqrstuvwxyz"
	bytes := []byte(str)
	result := []byte{}
	r := rand.New(rand.NewSource(time.Now().UnixNano()))
	for i := 0; i < l; i++ {
		result = append(result, bytes[r.Intn(len(bytes))])
	}
	return string(result)
}

// 浮点数计算
func FloatCalculate(oper string, f1 float64, f2 float64) float64 {
	var f1Decimal = decimal.NewFromFloat(f1)
	var f2Decimal = decimal.NewFromFloat(f2)

	var resultDecimal decimal.Decimal
	var result float64 //计算结果
	switch oper {
	case "+":
		resultDecimal = f1Decimal.Add(f2Decimal)
	case "-":
		resultDecimal = f1Decimal.Sub(f2Decimal)
	case "*":
		resultDecimal = f1Decimal.Mul(f2Decimal)
	case "/":
		resultDecimal = f1Decimal.Div(f2Decimal)
	}
	//保留两位小数，四舍五入
	result, _ = resultDecimal.Round(2).Float64()
	return result
}

// 浮点数比较
func FloatCmp(f1 float64, f2 float64) int {
	var f1Decimal = decimal.NewFromFloat(f1)
	var f2Decimal = decimal.NewFromFloat(f2)
	return f1Decimal.Cmp(f2Decimal)
}

// 计算两个时间之间相差的秒数
func DatesBetweenSecond(startDate time.Time, endDate time.Time) (sec int64) {
	// 日期转秒时间戳
	startTime := startDate.Unix()
	endTime := endDate.Unix()
	// 获取日期秒之差
	sec = endTime - startTime
	return sec
}

// println记录日志公共方法
func PrintLog(data any) {
	fmt.Println("<========start=====", time.Now().Format("2006-01-02 15:04:05"), "================")
	fmt.Printf("%+v\n", data)
	fmt.Println("========end========", time.Now().Format("2006-01-02 15:04:05"), "================>")
}

func GetPage(page int) int {
	if page <= 0 {
		page = 1
	}
	return page
}

// 查询两个切片是否有交集
func GetSliceIntersection(slice1 []string, slice2 []string) bool {
	result := false
	// 创建一个 map 用来存储第一个切片中的元素
	resultMap := make(map[string]bool)
	// 遍历第一个切片，将元素存入 map 中
	for _, v := range slice1 {
		resultMap[v] = true
	}
	// 遍历第二个切片，检查元素是否也在第一个切片的 map 中
	for _, v := range slice2 {
		if resultMap[v] {
			result = true
		}
	}
	return result
}
